/*
 * @Description: 第二章（初始化仓库Store）
 * @Author: IA ia@kepro.space
 * @Date: 2025-02-24 23:32:39
 */
import { defineStore } from 'pinia'
import { Names } from './store-name'

// 第五章（Actions，getters）
type User = {
    name:string,
    age: number
}
let result:User = {
    name: "飞机1",
    age: 888
}
const Login = ():Promise<User> => {
    return new Promise((resolve) => {
        setTimeout(() => {
            resolve({
                name: '飞机2',
                age:999
            })
        }, 1)
    })
}

export const useTestStore = defineStore(Names.TEST, {
    state: () => {
        return {
            current: 1,
            name: "小飞机",
            user: <User>{},
        }
    },
    getters: {
        // getters 类似computed 帮助修饰一些值 有缓存
        newName1 ():string {
            return `$-${this.name}-${this.getUserAge}`
        },
        // getters 也可以相互调用
        getUserAge (): number {
            return this.user.age
        }
    },
    actions: {
        // actions 类似methods ，可以做一些同步、异步的操作，最后提交给state
        
        setCurrent (num:number) {
            this.current = num
        },
        
        // 第五章（Actions，getters）
        // 同步方法
        setUser1 () {
            this.user = result
        },
        // 异步方法
        async setUser2 () {
            const result = await Login()
            this.user = result
            this.setName('大飞机')
        },
        // 同步方法，允许方法相互调用
        setName(name:string) {
            this.name = name
        }
    }
})

// 第六章（API）
export const useStore = defineStore(Names.BASE, {
    state: () => {
        return {
            current: 1
        }
    }
})